home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / src / haeberli / include / arg.h < prev    next >
C/C++ Source or Header  |  1994-08-01  |  4KB  |  91 lines

  1. /*
  2.  * Copyright 1991, 1992, 1993, 1994, Silicon Graphics, Inc.
  3.  * All Rights Reserved.
  4.  *
  5.  * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
  6.  * the contents of this file may not be disclosed to third parties, copied or
  7.  * duplicated in any form, in whole or in part, without the prior written
  8.  * permission of Silicon Graphics, Inc.
  9.  *
  10.  * RESTRICTED RIGHTS LEGEND:
  11.  * Use, duplication or disclosure by the Government is subject to restrictions
  12.  * as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
  13.  * and Computer Software clause at DFARS 252.227-7013, and/or in similar or
  14.  * successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
  15.  * rights reserved under the Copyright Laws of the United States.
  16.  */
  17. /* arg.h: definitions for argument parsing package */
  18.  
  19. #ifndef ARG_HDR
  20. #define ARG_HDR
  21.  
  22. /* $Header: arg.h,v 4.1 90/05/30 11:57:09 ph Locked $ */
  23.  
  24. #include <stdio.h>
  25. #include "expr.h"
  26.  
  27. typedef struct arg_form {    /* ARGUMENT FORM */
  28.  
  29.     /* a "form" contains the format, doc string, and miscellaneous internal */
  30.     /* info about an argument.  It's an argument descriptor, basically */
  31.  
  32.     struct arg_form *next;    /* next in linked list */
  33.     char *format;        /* scanf-style format:    "-size %d %F" */
  34.     char *flag;            /* flag portion of format:"-size" */
  35.     char *code;            /* just the format codes: "dF" */
  36.     char *doc;            /* documentation string:  "set widget size" */
  37.     short type;            /* REGULAR | SIMPFLAG | PARAMFLAG |
  38.                     SUBRFLAG | SUBLISTFLAG | NOP */
  39.     short nparam;        /* number of parameters to flag */
  40.     int parammask;        /* bit i says ok to stop before param i, i=0..*/
  41.     int **param;         /* parameter pointer list */
  42.     int (*subr)();        /* subroutine to call for action (if any) */
  43.     struct arg_form *sublist;    /* subordinate list (if any) */
  44.     short rep;            /* # times this flag repeated in arglist */
  45. } Arg_form;
  46.  
  47. /* form type values */
  48. #define ARG_REGULAR    1    /* a regular argument */
  49. #define ARG_SIMPFLAG    2    /* a simple flag (no parameters) */
  50. #define ARG_PARAMFLAG    3    /* a flag with parameters */
  51. #define ARG_SUBRFLAG    4    /* a flag with subroutine action */
  52. #define ARG_SUBLISTFLAG    5    /* a sub-formlist */
  53. #define ARG_NOP        6    /* no arg or flag, just a doc string */
  54.  
  55. /* the following must be impossible pointer values (note: machine-dependent) */
  56. #define ARG_MASKNEXT    0x80000000    /* mask for these NEXT flags */
  57. #define ARG_FLAGNEXT    0x80000001
  58. #define ARG_SUBRNEXT    0x80000002
  59. #define ARG_LISTNEXT    0x80000003
  60.  
  61. /* varargs tricks */
  62. #define ARG_FLAG(ptr)        ARG_FLAGNEXT, (ptr)    /* for SIMPFLAG */
  63. #define ARG_SUBR(ptr)        ARG_SUBRNEXT, (ptr)    /* for SUBRFLAG */
  64. #define ARG_SUBLIST(ptr)    ARG_LISTNEXT, (ptr)    /* for SUBLISTFLAG */
  65.  
  66. /* error codes: BADCALL is a programmer error, the others are user errors */
  67. #define ARG_BADCALL    -1    /* arg_parse call itself is bad */
  68. #define ARG_BADARG    -2    /* bad argument given */
  69. #define ARG_MISSING    -3    /* argument or parameter missing */
  70. #define ARG_EXTRA    -4    /* extra argument given */
  71.  
  72. #define ARG_NARGMAX 10000    /* max number of allowed args */
  73.  
  74. extern int arg_debug, arg_doccol;
  75. extern int arg_warning;        /* print warnings about repeated flags? */
  76. Arg_form *arg_to_form1(), *arg_find_flag(), *arg_find_reg();
  77.  
  78. #ifdef __cplusplus
  79.     extern "C" {
  80.     int arg_parse(int ac, char **av ...);
  81.     int arg_parse_argv(int ac, char **av, Arg_form *form);
  82.     int arg_parse_stream(FILE *fp, Arg_form *form);
  83.     Arg_form *arg_to_form(...);
  84.     int arg_form_print(Arg_form *form);
  85.     }
  86. #else
  87.     Arg_form *arg_to_form();
  88. #endif
  89.  
  90. #endif
  91.